package com.common.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginFilter extends FilterAdapter {

	protected FilterConfig filterConfig = null;

	protected String redirectURL = null;
	protected List notCheckURLList = new ArrayList();
	protected String sessionKey = null;

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		this.filterConfig = filterConfig;
		redirectURL = filterConfig.getInitParameter("redirectURL");
		sessionKey = filterConfig.getInitParameter("checkSessionKey");
		String notCheckURLListStr = filterConfig.getInitParameter("notCheckURLList");

		if (notCheckURLListStr != null) {
			StringTokenizer st = new StringTokenizer(notCheckURLListStr, ";");
			notCheckURLList.clear();
			while (st.hasMoreTokens()) {
				notCheckURLList.add(st.nextToken());
			}
		}

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest hsrequest = (HttpServletRequest) request;
		String path = hsrequest.getServletPath();

		System.out.println("path=" + path);

		if (!("/webapp/login/login_index.jsp".equals(path) || "/webapp/login/index"
				.equals(path))) {
			HttpSession session = hsrequest.getSession();
			if (session.getAttribute("user") == null) {
				HttpServletResponse hsresponse = (HttpServletResponse) response;
				hsresponse.sendRedirect("webapp/login/login_index.jsp");
				System.out.println("哈哈。进来了。。。。。。。。。。。。。");
				return;
			}

		}
		chain.doFilter(request, response);
	}

	// -------------------------------------------

	/*
	 * 
	 * 
	 * import javax.servlet.*; import javax.servlet.http.HttpServletRequest;
	 * import javax.servlet.http.HttpServletResponse; import
	 * javax.servlet.http.HttpSession; import java.util.List; import
	 * java.util.ArrayList; import java.util.StringTokenizer; import
	 * java.io.IOException;
	 * 
	 *  // 用于检测用户是否登陆的过滤器，如果未登录，则重定向到指的登录页面
	 * 
	 *  // 配置参数
	 * 
	 *  // checkSessionKey 需检查的在 Session 中保存的关键字
	 *  // redirectURL 如果用户未登录，则重定向到指定的页面，URL不包括 ContextPath
	 *  // notCheckURLList 不做检查的URL列表，以分号分开，并且 URL 中不包括 ContextPath
	 * 
	 * 
	 * public class CheckLoginFilter implements Filter { protected FilterConfig
	 * filterConfig = null; private String redirectURL = null; private List
	 * notCheckURLList = new ArrayList(); private String sessionKey = null;
	 * 
	 * public void doFilter(ServletRequest servletRequest, ServletResponse
	 * servletResponse, FilterChain filterChain) throws IOException,
	 * ServletException { HttpServletRequest request = (HttpServletRequest)
	 * servletRequest; HttpServletResponse response = (HttpServletResponse)
	 * servletResponse;
	 * 
	 * HttpSession session = request.getSession(); if(sessionKey == null) {
	 * filterChain.doFilter(request, response); return; }
	 * if((!checkRequestURIIntNotFilterList(request)) &&
	 * session.getAttribute(sessionKey) == null) {
	 * response.sendRedirect(request.getContextPath() + redirectURL); return; }
	 * filterChain.doFilter(servletRequest, servletResponse); }
	 * 
	 * public void destroy() { notCheckURLList.clear(); }
	 * 
	 * private boolean checkRequestURIIntNotFilterList(HttpServletRequest
	 * request) { String uri = request.getServletPath() + (request.getPathInfo() ==
	 * null ? "" : request.getPathInfo()); return notCheckURLList.contains(uri); }
	 * 
	 * public void init(FilterConfig filterConfig) throws ServletException {
	 * this.filterConfig = filterConfig; redirectURL =
	 * filterConfig.getInitParameter("redirectURL"); sessionKey =
	 * filterConfig.getInitParameter("checkSessionKey");
	 * 
	 * String notCheckURLListStr =
	 * filterConfig.getInitParameter("notCheckURLList");
	 * 
	 * if(notCheckURLListStr != null) { StringTokenizer st = new
	 * StringTokenizer(notCheckURLListStr, ";"); notCheckURLList.clear();
	 * while(st.hasMoreTokens()) { notCheckURLList.add(st.nextToken()); } } } }
	 * 
	 * 
	 */

}
